package com.tth.learn.addproperties.java;

import org.junit.Test;

import java.io.*;

/**
 * @Author tth
 * @Date 2022/12/27 9:10
 */
public class ObjectInputOutputStreamTest {

    /**
     * 序列化过程：将内存中的java对象以二进制流的方式保存到磁盘中或通过网络传输出去
     * 使用ObjectOutputStream实现
     */
    @Test
    public void testObjectOutputStream() {
        ObjectOutputStream oos = null;
        try {
            // 1.造流
            oos = new ObjectOutputStream(new FileOutputStream("object.dat"));
            // 2.将对象持久化到文件
            oos.writeObject("我爱北京天安门");
            oos.flush();//刷新写入
            oos.writeObject(new Person("张小凡", 18));
            oos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 3.关闭流
            if (null != oos) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 反序列化过程：将磁盘或者网络中的二进制流转化为内存中的Java对象
     * 使用ObjectInputStream实现
     */
    @Test
    public void testObjectInputStream() {
        ObjectInputStream ois = null;
        try {
            // 1.造流
            ois = new ObjectInputStream(new FileInputStream("object.dat"));

            // 2.反序列化并打印
            Object object = ois.readObject();
            String str = (String) object;
            System.out.println(str);
            Object object1 = ois.readObject();
            Person person = (Person) object1;
            System.out.println(person);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            // 3.关闭流
            if (null != ois) {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
